約 2,447,270 件
https://w.atwiki.jp/littlemaidmob/pages/24.html
テクスチャ名 要求/提供モデル 作者 パック対応 画像 対応色 備考 Minecraft 擬人化(角川Ver.) SR2, Aug conatsu PACK blankimgプラグインエラー:ご指定のファイルがありません。アップロード済みのファイルを指定してください。 契約:■■□□■■□□□□□■■■□■ 鎧:default 角川さんが考えたMinecraft擬人化キャラクターを追加するテクスチャパック ストライクウィッチーズ SR2, Aug conatsu PACK blankimgプラグインエラー:ご指定のファイルがありません。アップロード済みのファイルを指定してください。 契約:■■□□□□□□□□■■■□□■ 鎧:default ストライクウィッチーズキャラクターを追加するテクスチャパック あっちこっち SR2, Aug conatsu PACK blankimgプラグインエラー:ご指定のファイルがありません。アップロード済みのファイルを指定してください。 契約:■■□□□■□□□□■□■□□■ 鎧:default あっちこっちキャラクターを追加するテクスチャパック 魔法少女リリカルなのは Aug conatsu PACK blankimgプラグインエラー:ご指定のファイルがありません。アップロード済みのファイルを指定してください。 契約:□■□□■□□□□□■□□□□□ 鎧:default 魔法少女リリカルなのはキャラクターを追加するテクスチャパック
https://w.atwiki.jp/luminochat/pages/16.html
六角大王で「テクスチャの一部を貼る」を使わないでマッピングした場合テクスチャがずれることがある 六角大王でテクスチャを貼る際、「テクスチャの一部を貼る」を使わないでマッピングした場合、テクスチャの端の部分がずれることがあります。 理由はよくわかりませんが、UV座標が微妙にずれているらしく反対側の端のテクスチャが出てきてしまいます。 全体的に同系色のテクスチャならあまり気にならないと思いますが、両端の色のコントラストが強いテクスチャの場合、線が入ったように見えるため注意が必要です。 解決策としては、「テクスチャの一部を貼る」を使ってマッピングするか、LWで貼り直した方が良いでしょう。
https://w.atwiki.jp/littlemaidmob/pages/25.html
テクスチャ名 要求/提供モデル 作者 パック対応 画像 対応色 備考 おこたセットモデル(動物ミミ関係etc) chuchu おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:□□□□□□□□□□□□■□□□ 鎧:default ネズミミモデル。 usagi おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:□□□□□□□□□□□□■□□□ ウサミミモデル。 DogDays おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:■■□□□□□□□□□□■□□□ 垂れ耳ワンコモデル。 東方キャラモデル Naz おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:□□□□□□□□□□□□□■□□ 鎧:default GUI ナズーリンモデル。 Chrno おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:□□□□□□□□□□□□□□■□ 鎧:default GUI チルノモデル。 Suika おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:■□□□□□□□□□□□□□□□ 鎧:default GUI 伊吹萃香モデル。 usagi おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:■□□□□□□□□□□□□□□□ GUI 鈴仙・優曇華院・イナバ。 tareusa おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:□□□□□□■□□□□□□□■□ 鎧:default GUI 因幡てゐモデル。 攻殻タチコマモデル Tachikoma おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:□□□□□□□□□□□■□□□□ 鎧:default GUI メイドさんを攻殻機動隊のタチコマにするモデル&光学迷彩Ver追加したテクスチャ。 スキンロードモデル SkinLoad おこた PACK 契約:■■□□■□□□□□□□□□□■ 野生:□□□□□□□□□□□□■□□□ 鎧:default キャラクタースキンを利用してメイドさんとして使うモデル。(スカート+ハーフスカート+追加髪の毛(モデルにより位置変更)) 追加武装モデル ExtraArms おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:□□□□□□□□□□□□□□□□ 鎧:default 特殊部隊・軍隊風キャラクターを追加するテクスチャパック 和風着物モデル「紫苑」 Shion おこた PACK 契約:■■□□■□□□□□□□□□□■ 野生:□□□□□□□□□□□□■□□□ 鎧:default メイドさんが和風に着物+簪&長い髪モデルになります。 リトルメイドプチ PETiT おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:■□□□□□□□□□□□□□□□ 鎧:default メイドさんを小型化!1マスの隙間も通れるプチモデルになります。 Dock氏作成のRanaさんモデル Rana おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:□■□■□■■□□□□□□■□□ 鎧:default GUI メイドさんがDock氏作成モデルのRanaさん風味になります。 ゆっくりしていってね!!!モデル Yukkuri おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:□□□□□□□□□□□□□□□□ 鎧:default GUI メイドさんが「ゆっくりしていってね!!!」の饅頭キャラになります。 パワプロクンモデル Pawapro おこた PACK 契約:■■■■■■■■■■■■■■■■ 野生:□□□□□□□□□□□□□□□□ 鎧:default メイドさんが野球に興味を持ったようです。
https://w.atwiki.jp/directx/pages/21.html
2Dのテクスチャを描画します。 test.png を読み込み、描画しています。 #include d3d9.h #include d3dx9.h #define SAFE_RELEASE(p) {if(p){(p)- Release();(p)=NULL;}}//安全に解放する LPDIRECT3D9 g_pD3D = NULL;//Direct3D9 LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;//レンダリングデバイス LPD3DXFONT g_pFont = NULL;//フォント LPDIRECT3DTEXTURE9 pTexture = NULL;//テクスチャ LPD3DXSPRITE pSprite = NULL;//スプライト //テキスト描画 void TextDraw(LPD3DXFONT pFont,char* text,int X,int Y) { RECT rect={X,Y,0,0};//描画位置 //スプライトポインタ(無くても良し),描画文字,文字数(-1で全部),描画範囲,フォーマット,色 pFont- DrawText(NULL, text, -1, rect, DT_LEFT | DT_NOCLIP, D3DCOLOR_ARGB(255, 0, 0, 0)); } //テクスチャ描画 void TexDraw(LPD3DXSPRITE pSpr,LPDIRECT3DTEXTURE9 pTex,int SrcX,int SrcY,int SrcW,int SrcH,int DstX,int DstY) { RECT rect={SrcX,SrcY,SrcW,SrcH};//画像の元位置 D3DXVECTOR3 Center(0,0,0);//センター D3DXVECTOR3 Pos((float)DstX,(float)DstY,0);//描画位置 pSpr- Begin(D3DXSPRITE_ALPHABLEND); pSpr- Draw(pTex, rect, Center, Pos,0xffffffff); pSpr- End(); } //Direct3D初期化 HRESULT InitD3D( HWND hWnd ) { //Direct3Dを生成する if(NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION))){return E_FAIL;} //デバイス生成用のパラメーター D3DPRESENT_PARAMETERS d3dpp;//パラメーター構造体 ZeroMemory( d3dpp, sizeof(d3dpp) );//ゼロで初期化 d3dpp.Windowed = TRUE;//ウインドウモードで起動 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;//バックバッファのスワップエフェクト Direct3Dにスワップエフェクトをまかせる d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;//バックバッファのフォーマット今表示されているモニタの設定と同じ d3dpp.BackBufferCount = 1;//バックバッファの数 d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;//マルチサンプリングは行わない d3dpp.MultiSampleQuality = 0;//マルチサンプリングは行わないので0 d3dpp.EnableAutoDepthStencil = TRUE;//Direct3Dに深度バッファの管理をまかせる d3dpp.AutoDepthStencilFormat = D3DFMT_D16;//深度バッファのフォーマット(通常はこの値で問題ない) d3dpp.hDeviceWindow = hWnd;//カバーウィンドウ=アプリケーションのウィンドウ d3dpp.Flags = 0;//フラグは使わない d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;//今のリフレッシュレートをそのまま使う d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;//モニタの垂直回帰を待つ //Direct3Dデバイスの生成 HAL(ハードウェアアクセラレーション) if(FAILED(g_pD3D- CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING, d3dpp, g_pd3dDevice))){ //HALが駄目ならHEL(ソフトウェアエミュレーション) if(FAILED(g_pD3D- CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp, g_pd3dDevice))){ //駄目なら終了 return(E_FAIL); } } //フォントの生成 MSゴシック //デバイス,文字高さ,文字幅,フォントスタイル,ミップマップのレベル,斜体にするかどうか,文字セット,出力精度,出力品質,フォントピッチとファミリ,フォント名,フォントポインタ HRESULT hr = D3DXCreateFont( g_pd3dDevice, 20, 0, FW_HEAVY, 1, false, SHIFTJIS_CHARSET, OUT_TT_ONLY_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE, MS ゴシック , g_pFont ); if FAILED(hr){return(E_FAIL);} //「テクスチャオブジェクト」の作成 if(FAILED(D3DXCreateTextureFromFileExA(g_pd3dDevice, test.png ,384,240,0,0, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT,D3DX_FILTER_NONE,D3DX_DEFAULT, 0x00000000,NULL,NULL, pTexture))) { MessageBox(0, テクスチャの作成に失敗しました , ,MB_OK); return E_FAIL; } // 「スプライトオブジェクト」の作成 if(FAILED(D3DXCreateSprite(g_pd3dDevice, pSprite))) { MessageBox(0, スプライトの作成に失敗しました , ,MB_OK); return E_FAIL; } return S_OK; } //終了時解放処理 VOID Cleanup() { SAFE_RELEASE(pSprite); SAFE_RELEASE(pTexture); SAFE_RELEASE(g_pFont); SAFE_RELEASE(g_pd3dDevice); SAFE_RELEASE(g_pD3D); } //レンダリング VOID Render() { //デバイスが無いなら終了 if(NULL==g_pd3dDevice){return;} //バックバッファのクリア g_pd3dDevice- Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,255,255), 1.0f, 0 ); //シーンの開始 if(SUCCEEDED(g_pd3dDevice- BeginScene())) { //ここに処理内容を書く TextDraw(g_pFont, テクスチャの描画 ,0,0); TexDraw(pSprite,pTexture,0,0,384,240,50,50); //シーンの終了 g_pd3dDevice- EndScene(); } //バックバッファを表画面に反映させる g_pd3dDevice- Present( NULL, NULL, NULL, NULL ); } //メッセージプロシージャ LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY //終了時 Cleanup(); PostQuitMessage(0); return 0; case WM_PAINT //ウインドウ描画時 Render(); return 0; case WM_SIZE //ウインドウサイズ変更時 InvalidateRect(hWnd,NULL,true);//画面更新 return 0; } return DefWindowProc( hWnd, msg, wParam, lParam ); } //メイン関数 INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT ) { //ウインドウクラスの登録 WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, Window1 , NULL }; RegisterClassEx( wc ); //タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定 RECT rect; SetRect( rect,0,0,640,480); AdjustWindowRect( rect, WS_OVERLAPPEDWINDOW, FALSE); rect.right=rect.right-rect.left; rect.bottom=rect.bottom-rect.top; rect.top=0; rect.left=0; //ウインドウの生成 HWND hWnd = CreateWindow( Window1 , Hello DirectX9 World !! , WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rect.right, rect.bottom, NULL, NULL, wc.hInstance, NULL ); //Direct3D初期化 if(SUCCEEDED(InitD3D(hWnd))) { //ウインドウ表示 ShowWindow(hWnd,SW_SHOWDEFAULT); UpdateWindow(hWnd); //メッセージループ MSG msg; while( GetMessage( msg,NULL,0,0)) { TranslateMessage( msg); DispatchMessage( msg); } } UnregisterClass( Window1 ,wc.hInstance); return 0; }
https://w.atwiki.jp/motion/pages/58.html
アルファでテクスチャを透過させたものを画面に反映する 透過させたいオブジェクトのアトリビュートエディタを開き、 テクスチャのタブの【共通マテリアルアトリビュート】を表示させておく。 メニューバーから【ウインドウ】→【レンダリングエディタ】→【ハイパーシェード】を開き、 アルファを設定したテクスチャを選択して透過させたいオブジェクトの【共通マテリアルアトリビュート】→【透明度】の部分に中ボタンのドラッグ&ドロップで放り込む。 同タブ内【ハードウェアテクスチャリング】→【テクスチャチャンネル】を適切なものに切り替えて透過させる。 基本的には【カラー】にしておけば大丈夫なはずである。 また、このハードウェアテクスチャリング内の項目が存在しない場合がある。その場合はバグなので一旦MAYAを落として再起動してみよう。
https://w.atwiki.jp/opengl/pages/293.html
マルチテクスチャです。 今回のプログラムは地球の地表テクスチャと雲のテクスチャを合成し、 地表よりも雲を遅れて回転させています。 マウスの左ドラッグで視点を変更できます。 画像はNASAがフリーで配布している物を縮小して使用しています。 earth.png cloud.png vertex.shader varying vec3 P; varying vec3 N; void main(void) { P = vec3(gl_ModelViewMatrix * gl_Vertex); N = normalize(gl_NormalMatrix * gl_Normal).xyz; gl_TexCoord[0] = gl_MultiTexCoord0; gl_TexCoord[1] = gl_TextureMatrix[1] * gl_MultiTexCoord0; gl_Position = ftransform(); } flagment.shader varying vec3 P; varying vec3 N; uniform sampler2D sampler0; uniform sampler2D sampler1; uniform float mixFactor;//混合率 void main(void) { vec3 L = normalize(gl_LightSource[0].position.xyz - P); N = normalize(N); vec4 ambient = gl_FrontLightProduct[0].ambient; float dotNL = dot(N, L);//max(0.0, dot(N, L)); vec4 diffuse = gl_FrontLightProduct[0].diffuse * max(0.0, dotNL); vec3 V = normalize(-P); vec3 H = normalize(L + V); float powNH = pow(max(dot(N, H), 0.0), gl_FrontMaterial.shininess); if(dotNL = 0.0) powNH = 0.0; vec4 specular = gl_FrontLightProduct[0].specular * powNH; //テクスチャの色 vec4 texColor0 = texture2D(sampler0, gl_TexCoord[0].st); vec4 texColor1 = texture2D(sampler1, gl_TexCoord[1].st); vec4 texColor = mix(texColor0, texColor1, mixFactor); //vec4 texColor = clamp(texColor0 + texColor1, vec4(0.0), vec4(1.0)); //GL_MODULATEモード gl_FragColor = (ambient + diffuse) * texColor + specular; //任意の混合比 // gl_FragColor = mix(ambient + diffuse, texColor, 0.5) + specular; } GLSL.h #pragma once #include stdio.h //GLSLクラス class GLSL{ public GLuint ShaderProg; GLuint VertexShader, FragmentShader; void ReadShaderCompile(GLuint Shader, const char *File);//shader fileを読み込みコンパイルする void Link( GLuint Prog );//リンクする void InitGLSL(const char *VertexFile);//GLSLの初期化 void InitGLSL(const char *VertexFile, const char *FragmentFile);//GLSLの初期化 void ON();//シェーダー描画に切り替え void OFF();//シェーダー解除 ~GLSL(); }; void GLSL ReadShaderCompile(GLuint Shader, const char *File){ FILE *fp; char *buf; GLsizei size, len; GLint compiled; fopen_s( fp,File, rb ); if(!fp) printf( ファイルを開くことができません %s\n , File); fseek(fp, 0, SEEK_END); size = ftell(fp); buf = (GLchar *)malloc(size); if (buf == NULL) { printf( メモリが確保できませんでした \n ); } fseek(fp, 0, SEEK_SET); fread(buf, 1, size, fp); glShaderSource(Shader, 1, (const GLchar **) buf, size); free(buf); fclose(fp); glCompileShader(Shader); glGetShaderiv( Shader, GL_COMPILE_STATUS, compiled ); if ( compiled == GL_FALSE ) { printf( コンパイルできませんでした!! %s \n , File); glGetProgramiv( Shader, GL_INFO_LOG_LENGTH, size ); if ( size 0 ) { buf = (char *)malloc(size); glGetShaderInfoLog( Shader, size, len, buf); printf(buf); free(buf); } } } void GLSL Link( GLuint Prog ){ GLsizei size, len; GLint linked; char *infoLog ; glLinkProgram( Prog ); glGetProgramiv( Prog, GL_LINK_STATUS, linked ); if ( linked == GL_FALSE ){ printf( リンクできませんでした!! \n ); glGetProgramiv( Prog, GL_INFO_LOG_LENGTH, size ); if ( size 0 ){ infoLog = (char *)malloc(size); glGetProgramInfoLog( Prog, size, len, infoLog ); printf(infoLog); free(infoLog); } } } void GLSL InitGLSL(const char *VertexFile){ GLenum err = glewInit(); if (err != GLEW_OK) { printf( Error %s\n , glewGetErrorString(err)); } printf( VENDOR= %s \n , glGetString(GL_VENDOR)); printf( GPU= %s \n , glGetString(GL_RENDERER)); printf( OpenGL= %s \n , glGetString(GL_VERSION)); printf( GLSL= %s \n , glGetString(GL_SHADING_LANGUAGE_VERSION)); VertexShader = glCreateShader(GL_VERTEX_SHADER); ReadShaderCompile(VertexShader, VertexFile); ShaderProg = glCreateProgram(); glAttachShader(ShaderProg, VertexShader); glDeleteShader(VertexShader); Link(ShaderProg); } void GLSL InitGLSL(const char *VertexFile, const char *FragmentFile){ GLenum err = glewInit(); if (err != GLEW_OK) { printf( Error %s\n , glewGetErrorString(err)); } printf( VENDOR= %s \n , glGetString(GL_VENDOR)); printf( GPU= %s \n , glGetString(GL_RENDERER)); printf( OpenGL= %s \n , glGetString(GL_VERSION)); printf( GLSL= %s \n , glGetString(GL_SHADING_LANGUAGE_VERSION)); VertexShader = glCreateShader(GL_VERTEX_SHADER); FragmentShader = glCreateShader(GL_FRAGMENT_SHADER); ReadShaderCompile(VertexShader, VertexFile); ReadShaderCompile(FragmentShader, FragmentFile); ShaderProg = glCreateProgram(); glAttachShader(ShaderProg, VertexShader); glAttachShader(ShaderProg, FragmentShader); glDeleteShader(VertexShader); glDeleteShader(FragmentShader); Link(ShaderProg); } void GLSL ON(){ glUseProgram(ShaderProg); } void GLSL OFF(){ glUseProgram(0); } GLSL ~GLSL(){ glDeleteProgram(ShaderProg); } PNG.h #pragma once #include lodepng.h //テクスチャクラス class TEXTURE{ protected LodePNG_Decoder decoder;//デコーダ unsigned char* buffer;//バッファ size_t buffersize, imagesize;//サイズ public TEXTURE(); TEXTURE(const char* FileName);//コンストラクタ void LOAD_PNG(const char* FileName);//PNG読み込み unsigned char* image;//イメージポインタ unsigned int Width,Height;//画像サイズ }; TEXTURE TEXTURE(){ } TEXTURE TEXTURE(const char* FileName){ LOAD_PNG(FileName); } void TEXTURE LOAD_PNG(const char* FileName){ LodePNG_Decoder_init( decoder); //ロード LodePNG_loadFile( buffer, buffersize, FileName); //デコード LodePNG_decode( decoder, image, imagesize, buffer, buffersize); //幅,高さ Width = decoder.infoPng.width;Height = decoder.infoPng.height; } main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, glew32.lib ) #include windows.h #include GL/glew.h #include GLSL.h #include math.h #include GL/freeglut/freeglut.h #include PNG.h float lightPos[] = {10.0f, 15.0f, 10.0f, 1.0f};//光源位置 float shadowDiffuse[] = {0.0f,0.0f,0.0f,0.3f};//影の拡散光 float shadowSpecular[] = {0.0f,0.0f,0.0f,1.0f};//影の鏡面光 struct View{ float pos[3];//位置(視点) float cnt[3];//注視点 float dist; //注視点から視点までの距離 float theta; //仰角(水平面との偏角) float phi; //方位角 float fovY; //視野角 float nearZ; //前方クリップ面(近平面) float farZ; //後方クリップ面(遠平面) }; View view = { 0.0f, 0.0f, 0.0f,//pos 0.0f, 1.0f, 0.0f,//cnt 7.0f, 30.0f, 20.0f,//dist, theta, phi 30.0f, 1.0f, 100.0f//fovY,nearZ, farZ }; View view0 = view; GLSL glsl; TEXTURE *texture[2]; float cloudpos = 0.0f; #define PAI 3.141592f int width = 640; int height = 480; int xStart, yStart; bool flagMouse = false; bool flagShadow = false; int objNo = 0; float ang = 0.0f; float dang = 0.1f;//角度増分 GLuint texName[2]; float mixFactor = 0.5f;//テクスチャ混合率 void drawSphere(double radius, int nSlice, int nStack){ int i, j; double r0, r1, th0, th1, phi; double p[2][3]; for(j = 0; j nStack; j++){ th0 = PAI * (double)j / (double)nStack; th1 = PAI * (double)(j+1) / (double)nStack; r0 = radius * sin(th0); r1 = radius * sin(th1); p[0][2] = radius * cos(th0); p[1][2] = radius * cos(th1); glBegin(GL_QUAD_STRIP); for(i = 0; i = nSlice; i++){ phi = 2.0 * PAI * (double)i / (double)nSlice; p[0][0] = r0 * sin(phi); p[0][1] = - r0 * cos(phi); p[1][0] = r1 * sin(phi); p[1][1] = - r1 * cos(phi); glNormal3dv(p[0]); glVertex3dv(p[0]); glNormal3dv(p[1]); glVertex3dv(p[1]); } glEnd(); } } void drawFloor(float widthX, float widthZ, int nx, int nz){ int i, j; //Floor1枚当たりの幅 float wX = widthX / (float)nx; float wZ = widthZ / (float)nz; float diffuse[][4] = {{ 0.7f, 0.7f, 0.7f, 1.0f}, { 0.1f, 0.1f, 0.1f, 1.0f} }; float ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f}; float specular[]= { 0.5f, 0.5f, 0.5f, 1.0f}; glMaterialfv(GL_FRONT,GL_AMBIENT,ambient); glMaterialfv(GL_FRONT,GL_SPECULAR,specular); glMaterialf(GL_FRONT,GL_SHININESS,100); glNormal3f(0.0f, 1.0f, 0.0f); glPushMatrix(); for (j = 0; j nz; j++) { float z1 = -widthZ / 2.0f + wZ * j; float z2 = z1 + wZ; for (i = 0; i nx; i++) { float x1 = -widthX / 2.0f + wX * i; float x2 = x1 + wX; glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse[(i + j) 1]); glBegin(GL_QUADS); glVertex3f(x1, 0.0f, z1); glVertex3f(x1, 0.0f, z2); glVertex3f(x2, 0.0f, z2); glVertex3f(x2, 0.0f, z1); glEnd(); } } glPopMatrix(); } void drawTexSphere(double radius, int nSlice, int nStack, int nRepeatS, int nRepeatT){ int i, j; double s, t0, t1, r0, r1, th0, th1, phi; double p[2][3]; for(j = 0; j nStack; j++){ t0 = (double)j / (double)nStack; t1 = (double)(j+1) / (double)nStack; th0 = PAI * t0; th1 = PAI * t1; r0 = radius * sin(th0); r1 = radius * sin(th1); p[0][2] = radius * cos(th0); p[1][2] = radius * cos(th1); t0 = (1.0 - t0) * nRepeatT; t1 = (1.0 - t1) * nRepeatT; glEnable(GL_TEXTURE_2D); glBegin(GL_QUAD_STRIP); for(i = 0; i = nSlice; i++){ s = (double)i / (double)nSlice; phi = 2.0 * PAI * s; p[0][0] = - r0 * cos(phi); p[0][1] = - r0 * sin(phi); p[1][0] = - r1 * cos(phi); p[1][1] = - r1 * sin(phi); s *= nRepeatS; glTexCoord2d(s, t0); glNormal3dv(p[0]); glVertex3dv(p[0]); glTexCoord2d(s, t1); glNormal3dv(p[1]); glVertex3dv(p[1]); } glEnd(); glDisable(GL_TEXTURE_2D); } } void resize(int w, int h){ glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(view.fovY, (double)w/(double)h, view.nearZ, view.farZ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); width = w; height = h; } void idle(void){ //再描画 glutPostRedisplay(); } void TexCreate(int NO,char* FileName){ glGenTextures(1, texName[NO]); texture[NO] = new TEXTURE(FileName); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); //テクスチャオブジェクトの作成 glBindTexture(GL_TEXTURE_2D, texName[NO]); //テクスチャの指定 glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,texture[NO]- Width,texture[NO]- Height,0,GL_RGBA,GL_UNSIGNED_BYTE,texture[NO]- image); //テクスチャの繰り返し方法の指定 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);//GL_CLAMP); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);//GL_CLAMP); //テクスチャを拡大・縮小する方法の指定 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);//NEAREST); glBindTexture(GL_TEXTURE_2D, 0); } void setLight(){ float lightAmbient0[] = {0.5, 0.5, 0.5, 1.0}; //環境光 float lightDiffuse0[] = {1.0, 1.0, 1.0, 1.0}; //拡散光 float lightSpecular0[] = {1.0, 1.0, 1.0, 1.0};//鏡面光 glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient0); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse0); glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular0); glLightfv(GL_LIGHT0, GL_POSITION, lightPos); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); } void setCamera(){ float pp = PAI / 180.0f; view.pos[2] = view.cnt[2] + view.dist * cos(pp * view.theta) * cos(pp * view.phi);//z view.pos[0] = view.cnt[0] + view.dist * cos(pp * view.theta) * sin(pp * view.phi);//x view.pos[1] = view.cnt[1] + view.dist * sin(pp * view.theta);//y resize(width, height); } void draw_earth(void){ float ambient[] = { 1.0f, 1.0f, 1.0f, 1.0f}; float diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f}; float specular[]= { 0.8f, 0.8f, 0.8f, 1.0f}; if(flagShadow){ glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,shadowDiffuse); glMaterialfv(GL_FRONT,GL_SPECULAR,shadowSpecular); }else{ glMaterialfv(GL_FRONT,GL_AMBIENT,ambient); glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse); glMaterialfv(GL_FRONT,GL_SPECULAR,specular); glMaterialf(GL_FRONT,GL_SHININESS,100); } glPushMatrix(); glTranslatef(0, 1.5, 0); glRotatef(ang, 0.0, 1.0, 0.0); glRotatef(90, 1.0, 0.0, 0.0); if(!flagShadow){ drawTexSphere(0.5, 20, 20, 1, 1); }else{ drawSphere(0.5, 20, 20); } glPopMatrix(); } void CalcShadowMat(int ID, float* mat){ float ex, ey, ez;//光源の方向 float a, b, c, d;//床の面のパラメータ float s; //object中心から光源までの距離 float x, y, z; x = lightPos[0]; y = lightPos[1]; z = lightPos[2]; //光源の方向ベクトル s = sqrt(x * x + y * y + z * z); ex = x / s; ey = y / s; ez = z / s; //フロアの方向ベクトル(y方向) a = 0.0f; b = 1.0f; c = 0.0f; d = -0.001f; //フロアと影の干渉を防ぐため //shadow matrix mat[0] = b * ey + c * ez; mat[1] = -a * ey; mat[2] = -a * ez; mat[3] = 0.0f; mat[4] = -b * ex; mat[5] = a * ex + c * ez; mat[6] = -b * ez; mat[7] = 0.0f; mat[8] = -c * ex; mat[9] = -c * ey; mat[10] = a * ex + b * ey; mat[11] = 0.0f; mat[12] = -d * ex; mat[13] = -d * ey; mat[14] = -d * ez; mat[15] = a * ex + b * ey + c * ez; } void drawShadow(){ float mat[16]; flagShadow = true; glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glDepthMask(GL_FALSE); //影の描画 CalcShadowMat(1, mat); glPushMatrix(); glMultMatrixf(mat); draw_earth(); glPopMatrix(); glDepthMask(GL_TRUE); glDisable(GL_BLEND); flagShadow = false; } void Init(void){ glsl.InitGLSL( vertex.shader , flagment.shader ); glClearColor(0.4f, 0.4f, 0.4f, 1.0f); setCamera();//視点を求める setLight(); //光源設定 glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); TexCreate(0, earth.png ); TexCreate(1, cloud.png ); } void display(void){ //テクスチャの回転 glActiveTexture(GL_TEXTURE1); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(cloudpos, 0, 0); glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); if(cos(PAI * view.theta /180.0) = 0.0){ gluLookAt(view.pos[0], view.pos[1]-3, view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0); }else{ gluLookAt(view.pos[0], view.pos[1]-3, view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0); } glLightfv(GL_LIGHT0, GL_POSITION, lightPos); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); //texture unit と texture object の関連付け glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texName[0]); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, texName[1]); glsl.ON(); //fragment shaderのユニフォーム変数mixFactorのインデックスを取得 GLint mixLoc = glGetUniformLocation(glsl.ShaderProg, mixFactor ); glUniform1f(mixLoc, mixFactor); //テクスチャユニットをシェーダ側のサンプラに関連付ける GLint samplerLoc0 = glGetUniformLocation(glsl.ShaderProg, sampler0 ); GLint samplerLoc1 = glGetUniformLocation(glsl.ShaderProg, sampler1 ); glUniform1i(samplerLoc0, 0);//GL_TEXTURE0を適用 glUniform1i(samplerLoc1, 1);//GL_TEXTURE1を適用 draw_earth(); glsl.OFF(); drawFloor(20.0, 20.0, 20, 20); drawShadow(); glutSwapBuffers(); } void mouse(int button, int state, int x, int y){ float pp = PAI / 180.0f; if(button == GLUT_LEFT_BUTTON state == GLUT_DOWN){ xStart = x; yStart = y; flagMouse = true; }else if(button == GLUT_RIGHT_BUTTON state == GLUT_DOWN){ if(x width/4 x 3*width/4 y height/4 y 3*height/4){ }else if(( x width/4 || x 3*width/4) (y height/4 y 3*height/4)){ if(x width/4 ) view.phi -= 1.0; else view.phi += 1.0; view.cnt[2] = view.pos[2] - view.dist * cos(pp * view.phi) * cos(pp * view.theta); view.cnt[0] = view.pos[0] - view.dist * sin(pp * view.phi) * cos(pp * view.theta); }else if((x width/4 x 3*width/4) (y height/4 || y 3*height/4)){ if( y height/4){ view.theta += 1.0; }else{ view.theta -= 1.0; } view.cnt[2] = view.pos[2] - view.dist * cos(pp * view.theta) * cos(pp * view.phi); view.cnt[0] = view.pos[0] - view.dist * cos(pp * view.theta) * sin(pp * view.phi); view.cnt[1] = view.pos[1] - view.dist * sin(pp * view.theta); }else if(x width/8 y 7*height/8) view.fovY -= 1.0;//zoom in else if(x 7*width/8 y 7*height/8) view.fovY += 1.0;//zoom out }else flagMouse = false; if(state == GLUT_DOWN) setCamera(); } void motion(int x, int y){ if(!flagMouse) return; if(cos(PAI * view.theta /180.0f) = 0.0f){ view.phi -= 0.5f * (float)(x - xStart) ;//tumble }else{ view.phi += 0.5f * (float)(x - xStart) ;//tumble } view.theta += 0.5f * (float)(y - yStart) ;//crane setCamera(); xStart = x; yStart = y; } //タイマー void timer(int value){ cloudpos-=0.0001f; ang += dang; if(ang = 360.0f)ang = 0.0f; glutTimerFunc(10 , timer , 0); } int main(int argc, char *argv[]) { glutInitWindowPosition(100, 100); glutInitWindowSize(width, height); glutInit( argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutCreateWindow( マルチテクスチャ ); glutDisplayFunc(display); glutIdleFunc(idle); glutMouseFunc(mouse); glutMotionFunc(motion); glutReshapeFunc(resize); glutTimerFunc(10 , timer , 0); Init(); glutMainLoop(); return 0; }
https://w.atwiki.jp/casinot/pages/30.html
てくs
https://w.atwiki.jp/eaglercraft/pages/22.html
テクスチャパックの入れ方 (bingのSEOツール見たらこのキーワードで、ググられてたかr((( SEO対策) 手順1.クライアントを起動して、設定画面(タイトルから、optionというボタンを押す)に移動 左下のResource pack... というボタンを押す その後、open Resource packを押して リソースパックのファイルを選択(1.21か1.16のファイルを使えば確実です) その後、Resource packのアイコンにマウスを近づけて 横矢印を押して Doneを押す。 完璧
https://w.atwiki.jp/wiki3_sai/pages/43.html
SAIユーザーのSAIの使い方とか。 一番近いものを一つ選んでください。 ペン入れレイヤーは使ってますか? 選択肢 投票数 投票 よく使う 2294 たまに使う 1174 使わない 1085 使ってみたい 1893 キーボードショートカットの使用頻度は? 選択肢 投票数 投票 ボタンって美味しいの? 1174 えっとアンドゥはCTRL+Zっと 1525 ショーと・・・何それ? 1095 用途について 選択肢 投票数 投票 WEBイラスト 2418 WEB漫画 193 同人誌 214 雑誌投稿 51 お仕事 147 らくがき 1502 メモ帳 20 日記帳 33 日々のストレスの捌け口 212
https://w.atwiki.jp/3dcustom/pages/108.html
ShadeTex(影テクスチャ)について このページは 3Dカスタム少女で使用されるテクスチャの一種である、ShadeTex(影テクスチャ)についてのページです ShadeTex(影テクスチャ)とは 物体の表面が何色であるかを決定するテクスチャ二種の内のひとつです。 決まった呼び名はありませんが、影テクスチャとかShadeTex(cgfxShaderファイルのShadeTexという項目に書かれているので)などと呼ばれます。 以降、本ページでは影テクスチャと表記します。 ポリゴン面の各ピクセルが何色であるかは、次の計算によって決定されます。 (テクスチャ * ColorBlend * 0.1) * (影テクスチャ * ShadeBlend * 0.1) * ハイライト * HighLightBlend * 0.1 テクスチャ画像から各ピクセルへの割り当ては、テクスチャの場合UVによって、 影テクスチャの場合光線ベクトルとポリゴン面の法線ベクトルとの角度によって決まります。 ※ここわけわからんですが、このページの主題ではないので流します 影テクスチャの仕様 影テクスチャには通常、縦16ピクセル、横256ピクセルの画像ファイルが用いられます。 しかし実は、このファイルのほんの一部のデータしか、影テクスチャとして使われません。 画像ファイルのうち、 •最も左のピクセルが「一番暗い」色として使われます •左から193個目のピクセルが「一番明るい」色として使われます •左から194個目以降のピクセルは使われません •上から8個目のピクセルだけが使われ、他は使われません これらの仕様を理解することで、意図したものにより近い質感を与えられます。 影テクスチャと法線ベクトルについて纏めてみました ※以下の解説ではシェーダ設定を string technique = "AllAmb_ShadowOff"※新テク追加technique float Ambint = [50] に変更したシェーダ設定ファイルを使用しています。 影テクスチャ 3Dモデル 3Dモデルに影テクスチャを貼付ける場合、まず各面の法線ベクトル(面の向き)から、各面の色が決定されます。 影テクスチャは、光の方向に対して0度〜180度の角度毎に使用される領域が決まっており、上図のテクスチャの場合は 左端から0度、右端で180度となっています。 ポリゴンの面(頂点)にはその向きを表す法線ベクトルがあります。 上図の円柱の各面の法線ベクトルは以下の様になります。 ※各角度は光の方向に対しての角度です 円柱の各法線ベクトルから、その角度に対応する影テクスチャ上の色がピックアップされ、各面の色(影)が決定されます。 ここで、円柱が接続された面で構成されていた場合は、面と面の間の法線ベクトル(影の色)が補完されます 実際の描画結果はこの様になります。 ※シェーダ設定の「string technique = "AllAmb_ShadowOff"」は、影テクスチャの全域(横)幅をモデル全域(光方向)幅と同じ長さに変更するもの。表示には新テクMOD(toonshader2.tah)が必要となります。 また「float Ambuent = [50]」に設定する事で影テクスチャ全域を無駄無く適用する事が出来ます。 ※影テクスチャは適用出来る幅が広ければ広い程影の解像度が高くなり、結果的に奇麗なシェーディングを得る事が出来ます。 グラデーション系の影テクスチャを使用する場合はこの傾向が顕著に現れる様です。